﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CPEBookWin
{
    public partial class ActualiteControl : UserControl
    {
        #region Variables locales
        private int nbrow = 0;
        private int _nbaime = 0;
        private TextBox txtCommenter;
        private Button btnCommenter;
        private TableLayoutPanel tableCommentaires;
        private ActualiteWebService.UtilisateurEWS _utilisateurActu;
        #endregion

        #region Propiétés
        public UtilisateurWebService.UtilisateurEWS utilisateur { get; set; }
        public int idstatut { get; set; }
        public string statut { set { lblStatut.Text = value; } }

        public ActualiteWebService.UtilisateurEWS utilisateurActu {
            get { return _utilisateurActu; }
            set
            {
                _utilisateurActu = value;
                linkUsername.Text = _utilisateurActu.prenom + " " + _utilisateurActu.nom;
            }

        }

        public int nbaime
        {
            get { return _nbaime; }
            set { 
                if (value == 0)
                    lblAime.Text = " -    Personne n'aime ça.";
                else if (value == 1)
                    lblAime.Text = " -    Une personne aime ça.";
                else if (value >= 2)
                    lblAime.Text = " -    " + value.ToString() + " personnes aiment ça."; 
                _nbaime = value; 
            }
        }

        public bool vousaimez
        {
            set
            {
                if (value)
                {
                    lblVousAimez.Visible = true;
                    linkJaime.Visible = false;
                    lblVousAimez.Enabled = true;
                    linkJaime.Enabled = false;
                }
                else
                {
                    lblVousAimez.Visible = false;
                    linkJaime.Visible = true;
                    lblVousAimez.Enabled = false;
                    linkJaime.Enabled = true;
                }

            }
        }

        public DateTime date {
            set { lblDate.Text = "Le " + value.ToString("dd/MM/yyyy") + " à " + value.ToString("HH:mm"); }
        }

        public Button BoutonSupprimer
        {
            set { btnSupprimer = value; }
            get { return btnSupprimer; }
        }
        #endregion

        #region Constructeur
        public ActualiteControl()
        {
            InitializeComponent();
        }
        #endregion

        #region Méthodes publiques
        /// <summary>
        /// Fonction permettant d'ajouter un commentaire
        /// </summary>
        /// <param name="commentaire"></param>
        public void addCommentaires (ActualiteWebService.CommentaireUtilisateurEWS[] commentaires)
        {
            Controls.CommentaireControl commentaireControl;
            Panel panelCommentaire = new Panel();
            tableCommentaires = new TableLayoutPanel();
            tableCommentaires.AutoSize = true;
            panelCommentaire.AutoSize = true;
            panelCommentaire.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
            tableCommentaires.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;

            nbrow = tableLayoutPanel1.RowCount;
            if (commentaires != null)
            {
                foreach (ActualiteWebService.CommentaireUtilisateurEWS commentaire in commentaires)
                {
                    commentaireControl = new Controls.CommentaireControl();
                    commentaireControl.text = commentaire.Commentaire.text;
                    commentaireControl.username = commentaire.Utilisateur.prenom + " " + commentaire.Utilisateur.nom;
                    commentaireControl.date = commentaire.Commentaire.date;
                    commentaireControl.idutilisateur = commentaire.Utilisateur.idutilisateur;

                    tableCommentaires.Controls.Add(commentaireControl);
                }
            }
            panelCommentaire.Controls.Add(tableCommentaires);
            panelCommentaire.Margin = new System.Windows.Forms.Padding(0);
            tableLayoutPanel1.Controls.Add(panelCommentaire, tableLayoutPanel1.ColumnCount, tableLayoutPanel1.RowCount);
            addCommenter();
           
        }
        #endregion

        #region Méthode privée
        /// <summary>
        /// Methode pour ajouter la zone commenter
        /// </summary>
        private void addCommenter()
        {
            CommenterControl commenterControl = new CommenterControl();
            txtCommenter = commenterControl.TextCommenter;
            btnCommenter = commenterControl.BoutonCommenter;

            btnCommenter.Click += new EventHandler(btnCommenter_Click);
            txtCommenter.KeyPress += new KeyPressEventHandler(txtCommenter_KeyPress);

            tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(0);
            tableLayoutPanel1.Controls.Add(commenterControl, tableLayoutPanel1.ColumnCount, tableLayoutPanel1.RowCount + 1);

        }
        #endregion

        #region Evenements
        /// <summary>
        /// Evenement appelé lors de l'appui d'une touche dans le textbox
        /// Utilisé pour gérer le Enter
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void txtCommenter_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Enter)
            {
                btnCommenter.PerformClick();
                e.Handled = true;
            }
        }

        /// <summary>
        /// Evenement appelé lors d'un click sur le bouton commenter
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCommenter_Click(object sender, EventArgs e)
        {
            if (txtCommenter.Text != "")
            {
                DateTime dateNow = DateTime.Now;
                Controls.CommentaireControl commentaireControl = new Controls.CommentaireControl();
                ActualiteWebService.ActualiteWSSoapClient actualiteWebService = WebServiceContext.actualiteWebService;
                actualiteWebService.ajouterCommentaire(idstatut, utilisateur.idutilisateur, txtCommenter.Text, dateNow);

                commentaireControl.text = txtCommenter.Text;
                commentaireControl.username = utilisateur.prenom + " " + utilisateur.nom;
                commentaireControl.date = dateNow;
                commentaireControl.idutilisateur = utilisateur.idutilisateur;

                tableCommentaires.Controls.Add(commentaireControl);
                txtCommenter.Text = "";
                txtCommenter.Focus();
            }

        }

        /// <summary>
        /// Methode appelé lors d'un clic sur l'utilisateur
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void linkUsername_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ((MasterForm)this.ParentForm).idUtilisateurProfil = utilisateurActu.idutilisateur;
            ((MasterForm)this.ParentForm).afficherProfil();
        }

        /// <summary>
        /// Méthode appelée lors d'un clic sur le lien j'aime
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void linkJaime_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ActualiteWebService.ActualiteWSSoapClient actualiteWebService = WebServiceContext.actualiteWebService;
            actualiteWebService.aimerStatut(idstatut, utilisateur.idutilisateur);
            nbaime++;
            vousaimez = true;
        }
        #endregion

        private void btnSupprimer_Click(object sender, EventArgs e)
        {
            ActualiteWebService.ActualiteWSSoapClient actualiteWebService = WebServiceContext.actualiteWebService;
            actualiteWebService.supprimerActualite(idstatut);
            ((MasterForm)this.ParentForm).tablePanelPrincipal.Controls.Remove(this);
        }
    }
}
